# 预备知识：python执行系统命令模块（subprocess）、IP地址处理模块（IPy）
# 输入内容：要检查的网段、子网掩码 (输入：192.168.0.0/24)
# 输出示例： 192.168.0.1已被使用  //使用ping命令
# 将输出结果放到文件
# 将可能存在异常的地方需要做相应处理
import subprocess
import ipaddress


network = input("请输入要检查的网段")

def check_ip_usage(network):
    used_ips = []
    try:
        ip_network = ipaddress.ip_network(network)
        for ip in ip_network.hosts():
            ip_str = str(ip)
            # ping_cmd = ['ping', '-c', '1', '-W', '1', ip_str]  # 构建ping命令
            result = subprocess.run(['ping', '-c', '4', ip_str], capture_output=True, text=True)
            # result = subprocess.run(ping_cmd, capture_output=True, text=True)  # 执行ping命令并获取输出

            if "1 packets transmitted" in result.stdout and "0 packets received" not in result.stdout:
                used_ips.append(ip_str)

        with open('used_ips.txt', 'a',encoding="utf-8") as f:
            for ip in used_ips:
                f.write(ip + "\n")

        return used_ips

    except Exception as e:
        return str(e)

result = check_ip_usage(network)
if isinstance(result, str):
    print(f"Error: {result}")
else:
    print(f"The following IPs are used:")
    for ip in result:
        print(ip)



